/*
Date:20210528 15:39PM
key:与出现三次的元素题目类似，每个位单独考虑。
    最后对于某一位j,A[j]是这1位有几个1，那么这一个位上的距离是
    A[j]*(n-A[j]).每个1对于(n-A[j])个0
*/
class Solution {
public:

    int totalHammingDistance(vector<int>& nums) 
    {
        int re=0;
        const int n=nums.size();
        int A[32];
        memset(A,0,sizeof(A));

        for(int i=0;i<n;i++)
        {
            for(int j=0;j<32;j++)
            {
                if(nums[i]&1)
                {
                    A[j]++;
                }
                nums[i]=nums[i]>>1;
            }

        }

        {
            for(int j=0;j<32;j++)
            {
                re+=(A[j]*(n-A[j]));
            }
            
        }
        return re;
    }
};